import { defineConfig } from 'vite';
import { resolve } from 'path';
import dts from 'vite-plugin-dts';

export default defineConfig({
    build: {
        lib: {
            entry: resolve(__dirname, 'src/lib/index.ts'),
            name: 'VCairn',
            formats: ['es', 'umd', 'iife'],
            fileName: (format) => {
                switch (format) {
                    case 'es':
                        return 'v-cairn.mjs'
                    case 'umd':
                        return 'v-cairn.cjs'
                    case 'iife':
                        return 'v-cairn.iife.js'
                    default:
                        return 'v-cairn.js'
                }
            }
        },
        minify: 'terser',
        terserOptions: {
            compress: true,
            mangle: {
                // 基础混淆配置
                properties: false, // 是否混淆对象属性（慎用，可能破坏代码）
                toplevel: true,    // 混淆顶层作用域的变量/函数名（⚠️ 会混淆导出的非保留名称）
                reserved: [
                    // 保留公共 API 名称（否则使用者无法调用你的函数）
                    'myExportedFunction',
                    'AnotherExportedClass'
                ]
            },
            format: {
                comments: false
            }
        },
        rollupOptions: {
            // 确保外部化处理那些你不想打包进库的依赖
            external: ['axios', 'mitt', 'vue'],
            output: {
                globals: {
                    // 为外部化依赖定义全局变量
                    axios: 'axios',
                    mitt: 'mitt',
                    vue: 'Vue'
                }
            }
        }
    },
    plugins: [
        dts({
            insertTypesEntry: true,
            include: ['src/lib'],
            outputDir: 'dist/types'
        })
    ]
})